package com.jm.service.impl;


import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.jm.common.util.Utils;
import com.jm.dao.AddressBookMapper;
import com.jm.pojo.AddressBook;
import com.jm.service.AddressBookService;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

@Service
@Transactional
public class AddressBookServiceImpl extends ServiceImpl<AddressBookMapper, AddressBook> implements AddressBookService {


    /**
     * 获得这个地址对象的地址的用户id以此作为条件
     * 将查到的所有的地址设置为非默认
     * 最后在单独修改这个地址对象为默认的地址
     *
     * @param addressBook 需要被设置为默认地址的地址对象
     * @return 是否设置成功
     */
    @Override
    public boolean setDefault(AddressBook addressBook) {
        LambdaUpdateWrapper<AddressBook> luw = new LambdaUpdateWrapper<AddressBook>();
//        寻找这个id对应的所有id
        luw.eq(AddressBook::getUserId, Utils.getCurrentId());
//        将所有地址设置为非默认
        luw.set(AddressBook::getIsDefault,0);
//        将所有地址设置为非默认的操作执行
        super.update(luw);
//        设置要修改的默认地址为1  表示你这个地址为默认的
        addressBook.setIsDefault(1);
//        返回执行的结果
        return updateById(addressBook);

    }

    /**
     * 得到当前用户的默认地址对象
     *
     * @return 当前用户默认地址对象
     */
    @Override
    public AddressBook selectByDefault() {
        LambdaUpdateWrapper<AddressBook> lqw = new LambdaUpdateWrapper<AddressBook>();
//        获得当前用户id
        lqw.eq(AddressBook::getUserId, Utils.getCurrentId());
//        查询条件为默认
        lqw.eq(AddressBook::getIsDefault, 1);
        return super.getOne(lqw);
    }

    /**
     * 得到一个用户的所有地址
     *
     * @param addressBook
     * @return 地址列表
     */
    @Override
    public List<AddressBook> selectAllAddress(AddressBook addressBook) {
        //        设置要查询的用户id
        addressBook.setUserId(Utils.getCurrentId());
        LambdaUpdateWrapper<AddressBook> lqw = new LambdaUpdateWrapper<AddressBook>();
        lqw.eq(true, AddressBook::getUserId, addressBook.getUserId());
        List<AddressBook> list = super.list(lqw);
        return list;
    }

    @Override
    public List<AddressBook> selectAddressByUserId(Long id) {
        LambdaQueryWrapper<AddressBook> qw = new LambdaQueryWrapper<AddressBook>();
        qw.eq(true, AddressBook::getUserId, id);
        List<AddressBook> list = super.list(qw);
        return list;
    }
}
